package com.viknix.threadpool.manager.server.dependence.monitor.listeners;

import com.viknix.threadpool.manager.server.dependence.monitor.event.Event;

import java.util.concurrent.Executor;

/**
 * @Author: Dongqi
 * @Date: 2021/11/2 10:50
 * @Version 1.0
 * @Description: 监听器抽象层：每个 Listener 只能监听一种 Event 事件
 */
@SuppressWarnings("PMD.AbstractClassShouldStartWithAbstractNamingRule")
public abstract class Listener<T extends Event> {

    /**
     * callback.
     *
     * @param event 监听的事件
     */
    public abstract void onEvent(T event);

    /**
     * 获取该监听器订阅的事件类型
     *
     * @return 订阅的事件类型
     */
    public abstract Class<? extends Event> subscribeType();

    /**
     * 如果此方法返回的 Executor 不为空，那么会用当前返回的线程池执行该监听器的监听方法
     *
     * @return 线程池对象
     */
    public Executor executor() {
        return null;
    }

    /**
     * 是否忽略过期事件
     *
     * @return default value is {@link Boolean#FALSE}
     */
    public boolean ignoreExpireEvent() {
        return false;
    }
}
